package com.qf.scms.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qf.scms.entity.SelCourse;
import com.qf.scms.param.SelCourseParam;
import com.qf.scms.vo.CourseVO;
import com.qf.scms.vo.SelCourseCalculateVO;
import com.qf.scms.vo.SelCourseVO;

/**
 * (SelCourse)表服务接口
 *
 * @author makejava
 * @since 2025-06-28 09:44:52
 */
public interface SelCourseService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    SelCourse queryById(Integer id);

    /**
     * 分页查询
     * @return
     */
    Page<SelCourseVO> queryByPage(SelCourseParam selCourseParam);

    /**
     * 新增数据
     *
     * @param selCourse 实例对象
     * @return 实例对象
     */
    SelCourse insert(SelCourse selCourse);

    /**
     * 修改数据
     *
     * @param selCourse 实例对象
     * @return 实例对象
     */
    SelCourse update(SelCourse selCourse);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(Integer id);

    /**
     * 通过sid和cid删除选课记录
     * @param cid 课程编号
     * @return 是否删除成功
     */
    Boolean deleteSelCourseRecordBySid(String sid, String cid);

    /**
     * 获取选课统计信息
     * @param cid 课程编号
     * @return 选课统计信息
     */
    SelCourseCalculateVO selCourseCalculate(String cid);

    /**
     * 学生选课
     * @param selCourseParam 选课参数
     * @return 是否选课成功
     */
    Boolean studentSelectCourse(SelCourseParam selCourseParam);

    /**
     * 查询当前学生的选课信息
     * @param selCourseParam 选课参数
     * @return 选课信息
     */
    IPage<CourseVO> queryStuSelCourseByPage(SelCourseParam selCourseParam);
}
